#ifndef __algorithm_H
#define __algorithm_H

#include "stdint.h"

typedef uint8_t		u8;
typedef uint16_t	u16;
typedef uint32_t	u32;


u8 hexNum2ASC(u8 da);
u8 hexNum2asc(u8 da);
u8 get_chk_xor(u8 * da, u16 len);
u8 get_chk_sum(u8 * da, u16 len);

void Int_To_ASCII(u16 dat,char *buf);
u8 BCD2Hex(u8 da);
u8 Hex2BCD(u8 da);
u16 char2u16(u8 * da);
//__asm void nop(void);
//void NOP_dly(u32 cnt);
void delay(u32 dlyCnt);
void delIpBlank(u8 * ip, u8 * pLen);
void delPortBlank(u8 * str, u8 * pLen);

void NumIncOne(u8 * da);


void ASCII2BCD(u8 * ascii, u8 * bcd, u8 ascLen);
void BCD2ASCII(u8 * bcd, u8 * ascii, u8 bcdLen);
u8 asc2hex(u8 ascDa);
u32 hex4CombineOne(u8 * da);

u16 hex2CombineOne(u8 * da);
u8 judgeIpType(u8 * Ip, u8 len);
void Int_To_ASCII_p(u32 dat, char *buf, u8 * bufLen);

u16 chkSumU16(u8 * da, u16 len);

void u16toHex2(u16 lDa, u8 * pDa);
void u32toHex4(u32 lDa, u8 * pDa);

u8 chk_valid_bcd_num(u8 * da, u8 len);
u8 chk_valid_bcd_time(u8 * da);
u8 chk_valid_ASC_YYMM(u8 * da);
u16 ASC_YYMM_toHex(u8 * da);
u8 chk_valid_ASC_num(u8 * da, u8 len);
u8 chk_valid_ASC_num2(u8 * da, u8 len);

u32 getU32_dif(u32 a, u32 b);
uint64_t getU64_dif(uint64_t a, uint64_t b);
void u32_To_ASCII_p2(u32 dat,char *buf, u8 * bufLen);
void u32_To_ASCII_hex(u32 dat,char *buf, u8 * bufLen);
void u16_To_ASCII_hex(u32 dat,char *buf, u8 * bufLen);
void hexStr2ascii(u8 * pHexStr, u8 * pAscii, u16 hexLen);
void hexStr2ASCII(u8 * pHexStr, u8 * pAscii, u16 hexLen);
void hexstr2asciidd(u8 * pHexStr, u8 * pAscii, u16 hexLen);

void Port_Format(u8 * PortDst, u8 * PortSrc, u8 Len);
void IP_Format(u8 * IpDst, u8 * IpSrc, u8 Len);

u8 chk_YYYYMMDD_BCD_SP(u8 * pDa);

void get_id_valid_time(u8 * pRawData, u8* pDate);
u8 Card_YYMM_NotValid(u8 * pDate, u16 year, u8 month);

void DecASCII2HexDWORD(u8 * pASC, u8 AscLen, u32 * pReDa);
void DecASCII2HexWORD(u8 * pASC, u8 AscLen, u16 * pReDa);
void ASCIIver2Hex(u8 * pASC, u8 AscLen, u8 * pReDa);
void ASCIImac2Hex(u8 * pASC, u8 AscLen, u8 * pReDa);

void strReverse(u8 *inDa, u8 * outDa, u16 len);
u8 chk_all_ff(u8 * pda, u32 len);
void xor_string(u8 * pDa, u8 xByte, u16 len);


void Letter2Lower(u8 * pDa, u8 len);
u8 judgeIpOrDNS(u8 * pDa, u8 len);
u8 getIpPortFromHttpIPAdr(u8 * pAdr, u8 AdrLen, u8 * reIp, u8 * reIpLen, u8 * rePort, u8 * rePortLen);
u8 getIpPortFromHttpDNSAdr(u8 * pAdr, u8 AdrLen, u8 * reIp, u8 * reIpLen, u8 * rePort, u8 * rePortLen);
void Int_To_ASCII_p2(u32 dat,char *buf, u8 * bufLen);
uint8_t chk_valid_ASC_name(uint8_t * da, uint16_t len);
u32 ASCII2Hex(u8 * ascii, u8 ascLen);
uint8_t get_valid_domain_name(char *str, uint8_t len);


#endif



